/**
 * 单例模式:
 * 不管我们尝试去创建多少次 
 * 它都只给你返回第一次所创建的那唯一的一个实例
 */
class SingleDog {
    show() {
        console.log('我是一个单例对象')
    }
    // static getInstance() {
    //     // 用一个对象属性来作为是否new过一个实例  如果没有就创建 有就直接返回
    //     // 判断是否已经new过1个实例
    //     if (!this.instance) {
    //         // 若这个唯一的实例不存在，那么先创建它
    //         this.instance = new SingleDog()
    //     }
    //     // 如果这个唯一的实例已经存在，则直接返回
    //     return this.instance
    // }
}

// 使用闭包的方式来实现
SingleDog.getInstance = (function() {
    // 定义自由变量instance，模拟私有变量
    let instance = null
    return function() {
        // 判断自由变量是否为null
        if(!instance) {
            // 如果为null则new出唯一实例
            instance = new SingleDog()
        }
        return instance
    }
})()

const s1 = SingleDog.getInstance()
const s2 = SingleDog.getInstance()

// true
console.log(s1.show() === s2.show())
